#ifndef CIRCLE_HPP__  
#define CIRCLE_HPP__  
#include <math.h>  
#include <string>  
  
#include "Color.hpp"  
  
template <typename T>  
class Circle : public Color  
{  
public:  
    Circle(T centerX, T centerY, T radius, eColor color);  
    Circle(T centerX, T centerY, T radius);  
    Circle(T radius);  
  
    T area();  
    T circumference();  
    T getX();  
    T getY();  
    T getRadius();  
  
protected:  
    T x;  
    T y;  
    T radius;  
};  
  
template <typename T>  
Circle<T>::Circle(T _x, T _y, T _radius, eColor _color)  
: Color(_color)  
{  
    x = _x;  
    y = _y;  
    radius = _radius;  
}  
  
template <typename T>  
Circle<T>::Circle(T _x, T _y, T _radius)  
: Color(none)  
{  
    x = _x;  
    y = _y;  
    radius = _radius;  
}  
  
template <typename T>  
Circle<T>::Circle(T _radius)  
: Color(none)  
{  
    x = const_cast<T>(0);  
    y = const_cast<T>(0);  
    radius = _radius;  
}  
  
template <typename T>  
T Circle<T>::area()  
{  
    return M_PI * radius * radius;  
}  
  
template <typename T>  
T Circle<T>::circumference()  
{  
    return const_cast<T>(2) * M_PI * radius;  
}  
#endif  